package com.demo.virtual_thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class VirtualThreadsDemo {

    public static void main(String[] args) throws InterruptedException {
        // 示例1：直接使用Thread.startVirtualThread（最简单的创建方式）
        Thread.startVirtualThread(() -> {
            System.out.println("【虚拟线程1】运行中，线程ID: " + Thread.currentThread().threadId());
            // 模拟耗时操作
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
            System.out.println("【虚拟线程1】任务完成");
        });

        // 示例2：使用Thread.ofVirtual()构建（更灵活的创建方式）
        Thread virtualThread = Thread.ofVirtual()
                .name("my-virtual-thread-") // 可选：设置线程名前缀
                .unstarted(() -> {
                    System.out.println("【虚拟线程2】运行中，线程名: " + Thread.currentThread().getName());
                    // 模拟IO操作
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
					}
                    System.out.println("【虚拟线程2】处理完成");
                });
        virtualThread.start(); // 需要手动启动

        // 示例3：使用Executors.newVirtualThreadPerTaskExecutor（推荐的生产环境用法）
        try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) {
            for (int i = 3; i <= 5; i++) {
                final int taskId = i;
                executor.submit(() -> {
                    System.out.printf("【虚拟线程%d】开始执行任务%n", taskId);
					try {
						Thread.sleep(200 * taskId);
					} catch (InterruptedException e) {
					}
                    System.out.printf("【虚拟线程%d】结束任务%n", taskId);
                });
            }
        } // 这里会自动关闭ExecutorService（try-with-resources）

        // 等待虚拟线程执行完成（防止主线程过早退出）
        Thread.sleep(2000);
        System.out.println("主线程结束");
    }
}